"""
定义一个序列化器，完成
传统身份认证，并签发token值
"""


from rest_framework import serializers
# authenticate: 全局认证函数
from django.contrib.auth import authenticate
from rest_framework_jwt.utils import jwt_encode_handler,jwt_payload_handler

class LoginSerializer(serializers.Serializer):

    username = serializers.CharField(
        max_length=20,
        min_length=5,
        required=True
    )

    password = serializers.CharField(
        min_length=8,
        max_length=20,
        required=True
    )


    def validate(self, attrs):
        # 1、完成传统身份认证
        username = attrs.get("username")
        password = attrs.get("password")
        user = authenticate(username=username, password=password)
        if not user:
            # 传统身份认证失败
            raise serializers.ValidationError("传统身份认证失败！")

        # user指的是一个经过传统身份认证之后的用户对象
        # 2、签发token
        payload = jwt_payload_handler(user)
        # 默认使用的key就是django配置文件中的密钥
        # 默认使用的就是sha256算法
        token = jwt_encode_handler(payload)

        # 3、返回有效数据
        return {
            "token": token,
            "user": user
        }










